// ccwc - A simple command-line utility to count bytes in files
// Usage: ccwc [options] [file...]
package main

import (
	"fmt"
	"os"
)

func main() {
	// 获取原始参数
	args := os.Args[1:]

	// 检查是否包含 -c 参数
	cFlag := false
	files := []string{}

	for _, arg := range args {
		if arg == "-c" {
			cFlag = true
		} else {
			files = append(files, arg)
		}
	}

	// 如果没有指定文件，从标准输入读取
	if len(files) == 0 {
		fileInfo, _ := os.Stdin.Stat()
		if (fileInfo.Mode() & os.ModeCharDevice) == 0 {
			// 有管道输入
			countAndPrint(os.Stdin, "", cFlag)
		} else {
			// 没有文件参数且不是管道输入，显示用法
			fmt.Fprintf(os.Stderr, "ccwc: missing file operand\n")
			fmt.Fprintf(os.Stderr, "Try 'ccwc --help' for more information.\n")
			os.Exit(1)
		}
		return
	}

	// 处理每个文件
	for _, file := range files {
		f, err := os.Open(file)
		if err != nil {
			fmt.Fprintf(os.Stderr, "ccwc: %v\n", err)
			continue
		}
		countAndPrint(f, file, cFlag)
		f.Close()
	}
}

// 统计和输出函数
func countAndPrint(reader *os.File, filename string, cFlag bool) {
	// 实现字节统计
	fileInfo, _ := reader.Stat()
	byteCount := fileInfo.Size()

	// 格式化输出
	if filename == "" {
		// 标准输入的情况不显示文件名
		fmt.Printf("  %8d\n", byteCount)
	} else {
		fmt.Printf("  %8d %s\n", byteCount, filename)
	}
}
